****************************************
* Johnson Karpoff and Yi               *
* Author: William C. Johnson           *
* revision date: 7/15/2021             *
* Revision of RFS paper                *
* Code to generate major tests in paper*
* This code generates all the major    *
* tests in the paper Johnson, Karpoff, *
* and Yi (2021). The code consists of  *
* two .do files to be run in Stata.    *
* Table 5 contains the universe of     *
* CRSP/COMPUSTAT firms and does not    *
* contain all the necessary data from  *
* the rest of the paper. Thus, this    *
* .do file will generate the all other *
* results in the paper.                *
****************************************
* The code is labeled below to include *
* the explicit code that generates     *
* each table. Excel files are created  *
* in the c:\data directory which       *
* contain the regression output for    *
* the major tables. Smaller tables and *
* summary statistics do not generate   *
* an Excel file.                       *
* The data file to run this code must  *
* be placed in the c:\data file to run *
* this Stata code.                     *
****************************************




set more 1
clear
set memory 320m
capture log close

use "C:\data\Table_1-9_data.dta"
keep if eindex!=.
tab  year,gen(yeardum) 
tab industry,gen(industrydum)

******************************
* Generate Table 1 which     *
* shows the number of        *
* observations on a year-by- *
* year basis.                *
******************************
*this just shows the number of observations in the year of the IPO
*Table 1.A 
tab year if timer==0


*Table 1.B
sort gvkey year 
gen leaving_sample=0
replace leaving_sample=1 if gvkey!=gvkey[_n+1]
*firms with missing data 
gen missingdata=0
replace missingdata=year-year[_n-1]-1 if gvkey==gvkey[_n-1] 
*Table 1.B firms with missing data
*note that we do not observe the missing observation,
*but that we observe the next year after the missing observation
*in this tabulation
tab timefrom if missingdata==1 & gvkey==gvkey[_n+1] 
*Table 1.B firms with data in year t 
tab timefromipo
*Total attrition
tab timefrom if leaving_sample==1


******************************
* Generate Table 2 which     *
* shows the number of        *
* firms increasing and       *
* decreasing their takeover  *
* defenses on a year-by-year *
* basis.                     *
******************************

sort timefromipo
by timefromipo: egen total_increases=sum(eindexup)
by timefromipo: egen total_decreases=sum(eindexdown)
by timefrom: sum total_increases 
by timefrom: sum total_decreases 
*note that in addition to the documented increases in takeover defenses, there are 22 observations
*where between the S-1 filing date and before the first proxy statement, the firm adopts additional
*takeover defenses. These are labelled as e-index increases in year zero.
sort timefromipo 
by timefromipo: sum eindex
sum eindex

******************************
* Generate Table 3 which     *
* is summary statistics of   *
* the difference between the *
* industry adjusted q for    *
* firms with high versus low *
* eindex.                    *
******************************


sort timer
by timer: ttest adj99Q, by(highe)

by timer: ranksum adj99Q, by(highe)




******************************
* Generate Table 4 which     *
* is our base value reversal *
* regressions.               *
******************************


reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*    if timer==0  ,cluster(gvkey)
estimates store n1, title(Model 1)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*    if timer==1  , cluster(gvkey)
estimates store n2, title(Model 2)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*   if timer==2 , cluster(gvkey)
estimates store n3, title(Model 3)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*    if timer==3  , cluster(gvkey)
estimates store n4, title(Model 4)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*    if timer==5 , cluster(gvkey)
estimates store n5, title(Model 5)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*    if timer==7 , cluster(gvkey)
estimates store n6, title(Model 6)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex yeardum* industrydum*   if timer==10, cluster(gvkey)
estimates store n7, title(Model 7)
replace cross=longtime*eindex
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock eindex longtime cross yeardum* industrydum*  , cluster(gvkey)
estimates store n8, title(Model 8)


*Table 4b
*2SLS results
*model 2 with Johnson et al IVs
ivreg2 Q99 (eindex cross =lawdum* California ) DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock longtime  industrydum*

*model 3 with Karpoff et al IVs
ivreg2 Q99 DELAWARE age logat SP500 insiderholdings missinginsiderholdings percentblock  longtime   (eindex cross = totalIPO totalgeo ) 


esttab n1 n2 n3 n4 n5 n6 n7 n8 using "c:/data/FINAL_table4_a_b_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 


******************************
* Generate Table 6 which is  *
* the lifecycle with low     *
* value for the frictions    *
* to adjust the takeover     *
* defenses.                  *
******************************


replace cross=longtime*eindex

gen doublecross1=eindex*lowcashvalue
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross lowcashvalue doublecross1, absorb(industry year)cluster(gvkey)
estimates store n23, title(Model 23)
gen doublecross2=eindex*lowacquisitionvalue
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross lowacquisitionvalue doublecross2, absorb(industry year)cluster(gvkey SP500)
estimates store n24, title(Model 24)
gen doublecross3=eindex*lowCEOchair
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross lowCEOchair doublecross3, absorb(industry year)cluster(gvkey)
estimates store n25, title(Model 25)

gen highcustomervalue=1-lowcustomervalue
gen doublecross4=eindex*highcustomervalue
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross highcustomervalue doublecross4, absorb(industry year)cluster(gvkey)
estimates store n26, title(Model 26)
gen highdurablesales=1-lowdurablesales
gen doublecross5=eindex*highdurablesales
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross highdurablesales doublecross5, absorb(industry year)cluster(gvkey)
estimates store n27, title(Model 27)
gen highfoundervalue=1-lowfoundervalue
gen doublecross6=eindex*highfoundervalue
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross highfoundervalue doublecross6, absorb(industry year)cluster(gvkey)
estimates store n28, title(Model 28)

gen doublecross7=eindex*highNPV
reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross highNPV doublecross7, absorb(industry year)cluster(gvkey)
estimates store n29, title(Model 29)

esttab n23 n24 n25 n26 n27 n28 n29 using "c:/data/FINAL_table6_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 



******************************
* Generate Table 7 which is  *
* the lifecycle with low     *
* value for additions and    *
* removale of takeover       *
* defenses.                  *
******************************

reghdfe Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock   eindex longtime cross , absorb(industry year)cluster(gvkey)

*tab industry, gen(industrydum)
*tab year,gen(yeardum)

reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  IPOeindex  if timer==0 ,cluster(gvkey)
estimates store n1, title(Model 1)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex eindexup eindexdown if timer==1 , cluster(gvkey)
estimates store n2, title(Model 2)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  IPOeindex eindexup eindexdown if timer==2 , cluster(gvkey)
estimates store n3, title(Model 3)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex eindexup eindexdown if timer==3 , cluster(gvkey)
estimates store n4, title(Model 4)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex eindexup eindexdown if timer==5 , cluster(gvkey)
estimates store n5, title(Model 5)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex eindexup eindexdown if timer==7 , cluster(gvkey)
estimates store n6, title(Model 6)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex eindexup eindexdown if timer==10 , cluster(gvkey)
estimates store n7, title(Model 7)

*here is the regression for panel B of table 7
replace cross=longtime*IPOeindex
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   IPOeindex longtime cross , cluster(gvkey)
estimates store n8, title(Model 8)

esttab n1 n2 n3 n4 n5 n6 n7 n8 using "c:/data/FINAL_table7_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 




******************************
* Generate Table 8 which is  *
* the lifecycle with c-index *
* as a measure of firm       *
* stickiness.                *
******************************

reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex  if timer==0 & highc==1 ,cluster(gvkey)
estimates store n1, title(Model 1)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==1 & highc==1 , cluster(gvkey)
estimates store n2, title(Model 2)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex if timer==2 & highc==1 , cluster(gvkey)
estimates store n3, title(Model 3)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==3 & highc==1  , cluster(gvkey)
estimates store n4, title(Model 4)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==5 & highc==1, cluster(gvkey)
estimates store n5, title(Model 5)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==7 & highc==1, cluster(gvkey)
estimates store n6, title(Model 6)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex if timer==10 & highc==1, cluster(gvkey)
estimates store n7, title(Model 7)
esttab n1 n2 n3 n4 n5 n6 n7  using "c:/data/FINAL_table8_a_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 


reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex  if timer==0 & highc==0 ,cluster(gvkey)
estimates store n1, title(Model 1)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==1 & highc==0 , cluster(gvkey)
estimates store n2, title(Model 2)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex if timer==2 & highc==0 , cluster(gvkey)
estimates store n3, title(Model 3)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==3 & highc==0  , cluster(gvkey)
estimates store n4, title(Model 4)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==5 & highc==0, cluster(gvkey)
estimates store n5, title(Model 5)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*   eindex if timer==7 & highc==0, cluster(gvkey)
estimates store n6, title(Model 6)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex if timer==10 & highc==0, cluster(gvkey)
estimates store n7, title(Model 7)
esttab n1 n2 n3 n4 n5 n6 n7  using "c:/data/FINAL_table8_b_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 

replace cross=eindex*longtime
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex longtime cross if highc==0, cluster(gvkey)
estimates store n1, title(Model 1)
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex longtime cross if highc==1, cluster(gvkey)
estimates store n2, title(Model 2)
gen eindex_highc=eindex*highc
gen longtime_highc=longtime*highc
gen triplecross=cross*highc
reg Q99 DELAWARE SP500 age logat  insiderholdings missinginsiderholdings percentblock  yeardum* industrydum*  eindex longtime cross highc eindex_highc longtime_highc triplecross, cluster(gvkey)
estimates store n3, title(Model 3)

esttab n1 n2 n3  using "c:/data/FINAL_table8_c_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 


******************************
* Generate Table 9 which     *
* examines the removal of    *
* takeover defenses as a     *
* function of the value of   *
* takeover defenses and as a *
* function of contractual    *
* frictions.                 *
* stickiness.                *
******************************

reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock cashvalue if timefrom>0 , absorb(year industry) cluster(gvkey)
estimates store n1, title(Model 1)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock acquisitionvalue if timefrom>0 , absorb(year industry) cluster(gvkey)
estimates store n2, title(Model 2)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock  CEOchair_value if timefrom>0, absorb(year industry) cluster(gvkey)
estimates store n3, title(Model 3)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock customervalue if timefrom>0, absorb(year industry) cluster(gvkey)
estimates store n4, title(Model 4)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock  durable_sales_value if timefrom>0, absorb(year industry) cluster(gvkey)
estimates store n5, title(Model 5)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock foundervalue if timefrom>0, absorb(year industry) cluster(gvkey)
estimates store n6, title(Model 6)
reghdfe eindexdown   age logat insiderholdings missinginsiderholdings percentblock NPV if timefrom>0, absorb(year industry) cluster(gvkey)
estimates store n7, title(Model 7)


esttab n1 n2 n3 n4 n5 n6 n7  using "c:/data/FINAL_table9_a_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order(eindex longtime cross lowcustomervalue lowdurablesales lowfoundervalue lowcashvalue lowacquisitionvalue lowCEOchair lowNPV triplecross ) ///
prehead() ///
prefoot() ///
indicate()) 

reghdfe eindexdown NPV highc age logat insiderholdings missinginsiderholdings percentblock if timefrom>0 , absorb(year industry) cluster(gvkey)
estimates store n1, title(Model 1)
reghdfe eindexdown NPV Harvard age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey)
estimates store n2, title(Model 2)
reghdfe eindexdown NPV Hedgefund age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey)
estimates store n3, title(Model 3)
reghdfe eindexdown NPV percentpassive age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey)
estimates store n4, title(Model 4)
reghdfe eindexdown NPV bigcity age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey)
estimates store n5, title(Model 5)
reghdfe eindexdown NPV numest age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey)
estimates store n6, title(Model 6)
reghdfe eindexdown NPV average_spread age logat insiderholdings missinginsiderholdings percentblock if timefrom>0  , absorb(year industry) cluster(gvkey  )
estimates store n7, title(Model 7)
esttab n1 n5 n6 n7 n4 n2 n3  using "c:/data/FINAL_table9_b_RFS.csv", replace  ///
cells(b(fmt(%9.3f) star) se(par) ) ///
starlevels(* .1 ** 0.05 *** .01) ///
stats(N r2, labels("Observations" "R-squared") ///
fmt(%9.0f %9.3f)) ///
varlabels(eindex "e-index" longtime "long time" cross "cross" lowcustomervalue "lowcustomervalue" ///
lowdurablesales "lowdurablesales" lowfoundervalue "lowfoundervalue" lowcashvalue "lowcashvalue" lowacquisitionvalue "lowacquisitionvalue"  ///
 lowCEOchair "lowCEOchair" lowNPV "lowNPV" doublecross "doublecross" /// 
collabels(,none) mlabels(,none) ///
order( age logat insiderholdings percentblock NPV highc bigcity numest average_spread percentpassive Harvard Hedgefund ) ///
prehead() ///
prefoot() ///
indicate()) 

